//
//  UITextField+checkEmoji.m
//  Test
//
//  Created by 美鑫科技 on 16/7/5.
//  Copyright © 2016年 MorpLCP. All rights reserved.
//

#import "UITextField+checkEmoji.h"

@implementation UITextField (checkEmoji)

- (void)awakeFromNib {
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEd) name:UITextFieldTextDidEndEditingNotification object:nil];
    
}

- (void)endEd {
    
    NSString *string = self.text;
    
    NSInteger strLength = string.length;
    
    if (strLength) {
        
        for (NSInteger i = 0; i < strLength; i ++) {
            
            if (i < strLength - 1) {
                
                NSString *tempStr = [string substringWithRange:NSMakeRange(i, 2)];
                
                if ([self stringContainsEmoji:tempStr]) {
                    
                    CPAlertView *alert = [[CPAlertView alloc] initWithTitle:@"提示" message:@"不能输入表情哦！" buttons:@"好的", nil];
                    alert.tag = 800050;
                    alert.delegate = self;
                    [alert show];
                    
                    break;
                    
                }
                
            }
            
        }
        
    }
    
}

- (BOOL)stringContainsEmoji:(NSString *)string {
    
    __block BOOL returnValue = NO;
    
    [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
     
     ^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
         
         const unichar hs = [substring characterAtIndex:0];
         
         if (0xd800 <= hs && hs <= 0xdbff) {
             
             if (substring.length > 1) {
                 
                 const unichar ls = [substring characterAtIndex:1];
                 
                 const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                 
                 if (0x1d000 <= uc && uc <= 0x1f77f) returnValue = YES;
                 
             }
             
         } else if (substring.length > 1) {
             
             const unichar ls = [substring characterAtIndex:1];
             
             if (ls == 0x20e3) returnValue = YES;
             
         } else {
             
             if (0x2100 <= hs && hs <= 0x27ff) returnValue = YES;
             
             else if (0x2B05 <= hs && hs <= 0x2b07) returnValue = YES;
             
             else if (0x2934 <= hs && hs <= 0x2935) returnValue = YES;
             
             else if (0x3297 <= hs && hs <= 0x3299) returnValue = YES;
             
             else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) returnValue = YES;
             
         }
         
     }];
    
    return returnValue;
    
}

- (void)alertView:(CPAlertView *)alertView buttonIndex:(NSNumber *)btnIndex {
    
    if (alertView.tag == 800050 && [btnIndex isEqual:@(0)]) [self becomeFirstResponder];
    
}

@end
